package main

import (
	co "distributed-database/coordinator"
	customrpc "distributed-database/rpcPackage"
	"fmt"
	"log"
)

// 整个项目的入口处
func main() {
		fmt.Printf("coordinator开启，注册RPC类型...")
	// 注册所有要通过RPC传输的类型
	customrpc.RegisterTypes()

	fmt.Printf("开始创建数据通道")
	// 创建数据通道
	dataChan := make(chan string, 100)
	fmt.Printf("启动http服务器，监听8080端口")
	// 启动 HTTP 服务器
	go co.StartHTTPServer(8080, dataChan)
	fmt.Printf("连接rpc服务器...")
	// 初始化请求处理器
	rh := &co.RequestHandler{}
	err := rh.StartrpcServer()
	if err != nil {
		log.Fatalf("连接RPC服务器错误: %v", err)
	}
	defer rh.Close()
	fmt.Printf("rpc服务器连接成功！")
	// 主循环：从 HTTP 接口收到 JSON 字符串后，解析并处理
	for receiveString := range dataChan {
		db, err := rh.ParseRequest(receiveString) // 原始字符串转换成结构体
		if err != nil {
			log.Printf("原始请求字符串解析为请求结构体失败: %v", err)
			continue
		}

		if err := rh.HandleRequest(db); err != nil { // 结构体转换成数据表
			log.Printf("处理请求失败: %v", err)
			continue
		}

		log.Printf("成功处理请求: %s", db.RequestID)
	}
}
